package br.com.jk.produto;

import br.com.jk.cidade.CidadeRn;
import br.com.jk.email.Email;
import br.com.jk.email.EmailJDialog;
import br.com.jk.email.EmailRn;
import br.com.jk.empresa.Empresa;
import br.com.jk.empresa.EmpresaJDialog;
import br.com.jk.empresa.EmpresaRn;
import br.com.jk.endereco.Endereco;
import br.com.jk.endereco.EnderecoRn;
import br.com.jk.telefone.Telefone;
import br.com.jk.telefone.TelefoneJDialog;
import br.com.jk.telefone.TelefoneRn;
import br.com.jk.util.ControllerException;
import br.com.jk.util.RNException;
import br.com.jk.util.Util;
import br.com.jk.util.pesquisa.Pesquisa;
import br.com.jk.util.pesquisa.Pesquisa.Tipo;
import br.com.jk.util.pesquisa.PesquisaJDialog;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.sf.jasperreports.engine.JRException;

/**
 *
 * @author camilo
 */
public class ProdutoController {

  private Produto produto;
  private EmailJDialog emJDialog;
  private TelefoneJDialog telJDialog;
  private int colunaSel;
  private int idEmpresa;
  public boolean modoConsulta;
  private Pesquisa pesquisa = new Pesquisa();

  public ProdutoController() {
    this.produto = new Produto();
  }

  /**
   * Verifica se todos os campos estão preenchidos, com excessão do campo jtfId
   *
   * @return
   */
  public boolean isNotNull() {
    /*if (dialog.getJtfCnpj().getText().isEmpty()) {
     Util.msgAdv("Campo \"CNPJ\" vazio.");
     dialog.getJtfCnpj().requestFocus();
     return false;
     } else if (dialog.getJtfIe().getText().isEmpty()) {
     Util.msgAdv("Campo \"IE\" vazio.");
     dialog.getJtfIe().requestFocus();
     return false;
     } else if (dialog.getJtfRazao().getText().isEmpty()) {
     Util.msgAdv("Campo \"Razão\" vazio.");
     dialog.getJtfRazao().requestFocus();
     return false;
     } else if (dialog.getJtfIdCidade().getText().isEmpty()) {
     Util.msgAdv("Campo \"Id Cidade\" vazio.");
     dialog.getJtfIdCidade().requestFocus();
     return false;
     } else if (dialog.getJtfCep().getText().isEmpty()) {
     Util.msgAdv("Campo \"CEP\" vazio.");
     dialog.getJtfCep().requestFocus();
     return false;
     } else if (dialog.getJtfRua().getText().isEmpty()) {
     Util.msgAdv("Campo \"Endereço\" vazio.");
     dialog.getJtfRua().requestFocus();
     return false;
     } else if (dialog.getJtfBairro().getText().isEmpty()) {
     Util.msgAdv("Campo \"Bairro\" vazio.");
     dialog.getJtfBairro().requestFocus();
     return false;
     } else if (dialog.getJtfNumero().getText().isEmpty()) {
     Util.msgAdv("Campo \"Nº\" vazio.");
     dialog.getJtfNumero().requestFocus();
     return false;
     } else if (dialog.getJtfFantasia().getText().isEmpty()) {
     Util.msgAdv("Campo \"Nome Fantasia\" vazio.");
     dialog.getJtfFantasia().requestFocus();
     return false;
     }*/
    return true;
  }

  public void salvar(Produto produto) {
    if (produto != null) {
      ProdutoRn produtoRn = new ProdutoRn();
      //faz a conexão com o bd e salva os registros
      produtoRn.salvar(produto);
    }
  }

  public List<Produto> listar() {
    ProdutoRn prn = new ProdutoRn();
    return prn.listar();
  }

  public void excluir(Produto produto) {
    ProdutoRn fornRn = new ProdutoRn();
    fornRn.excluir(produto);
  }

  /**
   * Habilita a pesquisa somente para os campos configurados nesse método
   *
   * @param coluna Índice da coluna da qual se deseja efetuar a pesquisa
   * @return Se o campo estiver habilitado permite a pesquisa. O default é: false;
   */
  public boolean setEnabledPesquisa(int coluna) {
    colunaSel = coluna;
    switch (coluna) {
      case ProdutoTableModel.COLUNA_COD_ID:
        pesquisa.setTipo(Pesquisa.Tipo.INTEGER);
        return true;
      case ProdutoTableModel.COLUNA_COD_CODEAN:
        pesquisa.setTipo(Pesquisa.Tipo.STRING);
        return true;
      case ProdutoTableModel.COLUNA_COD_DESCRICAO:
        pesquisa.setTipo(Pesquisa.Tipo.STRING);
        return true;
      case ProdutoTableModel.COLUNA_COD_PRECO_VENDA:
        pesquisa.setTipo(Pesquisa.Tipo.STRING);
        return true;
      case ProdutoTableModel.COLUNA_COD_EMBALAGEM:
        pesquisa.setTipo(Pesquisa.Tipo.STRING);
        return true;
      default:
        return false;
    }
  }

  public Pesquisa getCriterio(Tipo tipo) {
    return PesquisaJDialog.getCriterio(pesquisa.getTipo());
  }

  public void pesquisar() {
    /*Pesquisa pesq;
     if (modoConsulta) { //Se estiver habilitada a pesquisa executa o cod abaixo
     ProdutoRn ctrn = new ProdutoRn();

     //        Verifica qual é o tipo de campo e executa a consulta específica
     switch (colunaSel) {
     case ProdutoTableModel.COLUNA_COD_ID:
     pesq = getCriterio(pesquisa.getTipo());//abre a janela solicitando os dados ao usuário
     if (!pesq.isCancel()) {//se o retorno for positivo envia os dados para a jTable
     setJtFornTM(ctrn.pesquisaPadrao(Produto.ATTRIBUTE_ID, Integer.parseInt(pesq.getCriterio()), pesq.getOpcao()));
     }
     break;
     case ProdutoTableModel.COLUNA_COD_CODEAN:
     pesq = getCriterio(pesquisa.getTipo());//abre a janela solicitando os dados ao usuário
     if (!pesq.isCancel()) {//se o retorno for positivo envia os dados para a jTable
     setJtFornTM(ctrn.pesquisaPadrao(Produto.ATTRIBUTE_DESCRICAO, pesq.getCriterio(), pesq.getOpcao()));
     }
     break;
     case ProdutoTableModel.COLUNA_COD_DESCRICAO:
     pesq = getCriterio(pesquisa.getTipo());//abre a janela solicitando os dados ao usuário
     if (!pesq.isCancel()) {//se o retorno for positivo envia os dados para a jTable
     setJtFornTM(ctrn.pesquisaPadrao(Produto.ATTRIBUTE_EMBALAGEM, pesq.getCriterio(), pesq.getOpcao()));
     }
     break;
     //*case FornecedorTableModel.COLUNA_COD_CIDADE:
     // pesq = getCriterio(pesquisa.getTipo());//abre a janela solicitando os dados ao usuário
     //if (!pesq.isCancel()) {//se o retorno for positivo envia os dados para a jTable
     //setJtFornTM(ctrn.pesquisaPadrao(Fornecedor.ATTRIBUTE_, pesq.getCriterio()));
     // }
     //break;
     case ProdutoTableModel.COLUNA_COD_PRECO_VENDA:
     pesq = getCriterio(pesquisa.getTipo());//abre a janela solicitando os dados ao usuário
     if (!pesq.isCancel()) {//se o retorno for positivo envia os dados para a jTable
     setJtFornTM(ctrn.pesquisaPadrao(Produto.ATTRIBUTE_ATIVO, pesq.getCriterio(), pesq.getOpcao()));
     }
     break;
     case ProdutoTableModel.COLUNA_COD_EMBALAGEM:
     pesq = getCriterio(pesquisa.getTipo());//abre a janela solicitando os dados ao usuário
     if (!pesq.isCancel()) {//se o retorno for positivo envia os dados para a jTable
     setJtFornTM(ctrn.pesquisaPadrao(Produto.ATTRIBUTE_PRECO_VENDA, pesq.getCriterio(), pesq.getOpcao()));
     }
     break;
     }
     dialog.getJlFiltro().setVisible(true);
     dialog.getJbBuscar().setEnabled(false);
     limpar();
     }*/
  }

  public void report() throws JRException, Exception {
    ProdutoReport mReport = new ProdutoReport();
    mReport.geraRelatorio();
//    Master.setTextJlStatus("");
//    Master.setJpbStatusIndeterminate(false);
  }

  public Empresa carregaEmpresa(int idEmpresa) throws ControllerException {
    EmpresaRn empresaRn = new EmpresaRn();
    Empresa empresa;
    try {
      empresa = empresaRn.carregar(idEmpresa);
    } catch (RNException ex) {
      throw new ControllerException("Não foi encontrado nenhum registro");
    }
    return empresa;
  }

  public Produto getProduto() {
    return produto;
  }

  public void setProduto(Produto produto) {
    this.produto = produto;
  }

  public boolean isModoConsulta() {
    return modoConsulta;
  }

  public void setModoConsulta(boolean modoConsulta) {
    this.modoConsulta = modoConsulta;
  }
}